home
***
CD-ROM
|
disk
|
FTP
|
other
***
search
/
FM Towns: Free Software Collection 11
/
FM Towns Free Software Collection 11.iso
/
fb386
/
tool
/
roman4
/
roman4.doc
< prev
next >
Wrap
Text File
|
1995-07-19
|
10KB
|
243 lines
-------------------------------------------------------------------------------
ローマ字カナ変換プログラム by たくりん
-------------------------------------------------------------------------------
◆はじめに
これは、大学のソフトウェア実験の課題で作成したプログラムです。プログラミン
グの基礎を学ぶのが目的であるため、実用的な価値はありませんが、BASIC初心
者のかたがた、もしくは、同じような課題を大学で与えられたかたにとって、何らか
の参考になるのではないかと思い、応募いたします。
◆概要
状態遷移についての課題で作成したもので、ローマ字をカナに変換するプログラム
です。デフォルトでは、キーボードからの入力を、スクリーンに出力するのですが、
入出力をファイルに変更するのも簡単にできるようにしています。
フリコレ8に収録されたもののバージョンアップではありますが、ソフトウェア設
計の段階から作り直しました。
◆環境
◇動作環境
FM TOWNS/FM TOWNS II 全機種
F-BASIC386 V2.1L10 以降
◇開発環境&動作確認
FM TOWNS II MA20(RAM 10MB)
+ HDD 520MB(ELECOM Fixell in TOWNS)
TownsOS V2.1L31
+ F-BASIC386コンパイラ V2.1L10
◆ファイル
roman4.bas :BASICプログラム・ソースファイル
roman4.doc :説明書(このファイル)
roman4.ggg :概要書
◆使用方法
F-BASIC386を立ち上げ、“roman4.bas”を実行してください。
データ起動の設定をしてあるかたは、TownsMENUで、直接、“roman4.
bas”をダブルクリックすれば、実行できます。
実行すると、下の表示がされたあと、キーボードからの入力待ちになります。
ローマ字カナ変換プログラム By たくりん
入力されたローマ字文を、半角カナ文に変換して出力する。
変換対象は半角英字のみで、大文字小文字の区別はしない。
半角英字でない文字は、そのまま出力する。
改行のみの入力、もしくはエラーが起きると終了する。
キーボードから半角英字で何かローマ字の文章を入力して、リターンキーを押すと、
入力文と変換後の文をスクリーンに出力します。出力すると、再びキーボードからの
入力待ちになります。下に例を示します。
watashiha efuemu taunzu desu (キーボードから入力)
入力>watashiha efuemu taunzu desu (入力文を出力)
変換>ワタシハ エフエム タウンズ デス (変換後の文を出力)
_ (入力待ち)
終了したくなったら、入力待ちの時に、リターンキーのみを押して下さい(BRE
AKキーでの中断は禁止してあります)。下の表示をしたあと、プログラムを終了し
ます。
入出力デバイスをクローズして終了します。
何かエラーが起きた場合は、下のような表示をして、プログラムを終了します。
エラー No. XX が起きました。
入出力デバイスをクローズして終了します。
◆ローマ字カナ変換について
◇ローマ字カナ対応表
ローマ字とカナの対応は、TownsMENUディクショナリに載っている表をも
とにしました(一部相違あり)。以下に、一覧表を示します。
母音
A I U E O ア イ ウ エ オ
子音一つと母音
LA LI LU LE LO ァ ィ ゥ ェ ォ
KA KI KU KE KO カ キ ク ケ コ
SA SI SU SE SO サ シ ス セ ソ
TA TI TU TE TO タ チ ツ テ ト
NA NI NU NE NO ナ ニ ヌ ネ ノ
HA HI HU HE HO ハ ヒ フ ヘ ホ
MA MI MU ME MO マ ミ ム メ モ
YA YI YU YE YO ヤ イ ユ イェ ヨ
RA RI RU RE RO ラ リ ル レ ロ
WA WI WU WE WO ワ ウィ ウ ウェ ヲ
GA GI GU GE GO ガ ギ グ ゲ ゴ
ZA ZI ZU ZE ZO ザ ジ ズ ゼ ゾ
DA DI DU DE DO ダ ヂ ヅ デ ド
BA BI BU BE BO バ ビ ブ ベ ボ
PA PI PU PE PO パ ピ プ ペ ポ
FA FI FU FE FO ファ フィ フ フェ フォ
JA JI JU JE JO ジャ ジ ジュ ジェ ジョ
VA VI VU VE VO ヴァ ヴィ ヴ ヴェ ヴォ
子音とYと母音
LYA LYI LYU LYE LYO ャ ィ ュ ェ ョ
KYA KYI KYU KYE KYO キャ キィ キュ キェ キョ
SYA SYI SYU SYE SYO シャ シィ シュ シェ ショ
TYA TYI TYU TYE TYO チャ チィ チュ チェ チョ
CYA CYI CYU CYE CYO チャ チィ チュ チェ チョ
NYA NYI NYU NYE NYO ニャ ニィ ニュ ニェ ニョ
HYA HYI HYU HYE HYO ヒャ ヒィ ヒュ ヒェ ヒョ
FYA FYI FYU FYE FYO フャ フィ フュ フェ フョ
MYA MYI MYU MYE MYO ミャ ミィ ミュ ミェ ミョ
RYA RYI RYU RYE RYO リャ リィ リュ リェ リョ
GYA GYI GYU GYE GYO ギャ ギィ ギュ ギェ ギョ
ZYA ZYI ZYU ZYE ZYO ジャ ジィ ジュ ジェ ジョ
JYA JYI JYU JYE JYO ジャ ジィ ジュ ジェ ジョ
DYA DYI DYU DYE DYO ヂャ ヂィ ヂュ ヂェ ヂョ
BYA BYI BYU BYE BYO ビャ ビィ ビュ ビェ ビョ
PYA PYI PYU PYE PYO ピャ ピィ ピュ ピェ ピョ
子音とHと母音
SHA SHI SHU SHE SHO シャ シ シュ シェ ショ
CHA CHI CHU CHE CHO チャ チ チュ チェ チョ
THA THI THU THE THO テャ ティ テュ テェ テョ
DHA DHI DHU DHE DHO デャ ディ デュ デェ デョ
撥音(ン)
N + N または N + N以外の子音
ツ
TSU
促音(ッ)
MM LL KK YY CC など、N以外の子音のくりかえし
長音
X または 「-」を直接入力
◇変換アルゴリズム
今、「A」が入力されたとします。その前に子音がなければ、「ア」として良いの
ですが、その前に子音があるなら、それと合わせてカナに変換しなければなりません。
入力だけで処理が決まるのではなく、そのときの状態によって入力の解釈が異なりま
す。そこで、状態遷移という概念を導入しなければなりません。
入力が同じ「A」でも、その前に保留されている(変換が済んでいない)文字によ
り、処理(変換結果)が異なります。また、保留の内容が同じでも、入力された母音
により、例外的に、処理が異なる場合もあります。下に例を示します。
・保留なし+「A」:「ア」に変換、保留はゼロ
・「K」 +「A」:「カ」に変換、保留はゼロ
・「F」 +「A」:「ファ」に変換、保留はゼロ
・「KY」+「A」:「キャ」に変換、保留はゼロ
・「SH」+「A」:「シャ」に変換、保留はゼロ
・「TS」+「A」:「T」は捨てて、「SA」を「サ」に変換、保留はゼロ
・「TS」+「U」:「ツ」に変換、保留はゼロ
また、子音が入力されたときも、単にそれを保留していけば良いというわけではあ
りません。前の文字との組み合わせが、あり得る場合や、あり得ない場合、また、促
音「ン」や撥音「ッ」の処理も例外的に行わなければなりません。下に例を示します。
・保留なし+「K」:「K」を保留
・「S」 +「K」:「S」は捨てて、「K」のみを保留
・「N」 +「K」:「N」を促音「ン」に変換、「K」を保留
・「K」 +「K」:「KK」を撥音「ッ」に変換、「K」を保留
・「S」 +「H」:「SH」を保留
・「K」 +「Y」:「KY」を保留
・「KY」+「H」:「KY」は捨てて、「H」のみを保留
・「NY」+「H」:「N」を促音「ン」に変換、「Y」は捨てて、「H」を保留
・「SH」+「H」:「S」は捨てて、「HH」を撥音「ッ」に変換、「H」を保留
・「TS」+「H」:「T」は捨てて、「SH」を保留
一方、コード変換について考えてみます。保留なしの状態で、今、アルファベット
が一文字入力されたとします。その文字が母音なら、カナに変換するべきであり、子
音なら、それ以降の文字を待たなければなりません。これを処理するのに、IF文の
羅列などをしては最悪です。そこで、コンテントアドレッシング(内容をアドレスに
使う)という方法があります。
まず、次のように、iという0~25の値を求めます。
i=(一文字目のASCIIコード)-(「A」のASCIIコード)
配列A(i)には、iが母音の所には対応するカナの文字(文字列)を、そうでな
い所には特殊な値(例えば-1)を入れておきます。そうすれば、次のように、母音
の決定ができます。
if A(i)<0 then
次の文字を見に行く
else
カナ=A(i)の示す文字列
endif
次に、一文字目が子音であり、次の文字を見てカナを決めるには、さらに、jとい
う値を求めて、二次元の配列B(i,j)を引いて、子音+母音の決定ができます。
j=(二文字目のASCIIコード)-(「A」のASCIIコード)
if B(i,j)<0 then
あり得ない組み合わせ。または、その次の文字を見に行く
else
カナ=B(i,j)の示す文字列
endif
この延長で、三文字からなるローマ字の場合、三次元の配列を考えれば良いことに
なります。
◆ソースについて
変数の説明や、コメントなどを、詳しく記してありますので、興味のあるかたは、
じっくりお読みください。
このプログラムでは、上の例のように、単純に配列A(i)やB(i,j)ですぐ
変換しているわけではありません。
また、三次元の配列は使わずに、二次元配列の値を添え字として、さらに二次元の
文字型配列を参照することにより、同様の機能を実現しています。
というのは、一次元ならばまだ良いのですが、二次元や三次元の文字型配列となる
と、無駄が多く、書くのも面倒なので、少し工夫をしてみました(かえって分かりに
くくなったともいえますが)。どんな機構になっているか解読してみるのも、勉強に
なると思います。
冒頭に書いたように、このプログラムが、大学で同じような課題を与えられたかた
のために、お役に立つことがあれば、嬉しいです。しかし、その際、このプログラム
をそのまま提出したり、変数名だけ変えて提出するようなことは、避けてください。
プログラムの盗用とみなされるようなことをすると、一発で単位を落とされると思
います。それで進級できなくても、本人の責任ですので、ご了承ください。
◆使用、再配布等について
本作はフリーソフトウェアです。無償である限り、自由に配布/転載/使用して下
さって構いません。その際、ドキュメントファイル及び必須ファイル(あれば)を付
属して下さい。また、内容を改変した物や二次利用した作品は、その旨をドキュメン
ト等に明示して下さい。
また、本作について(鑑賞料やプレイ料金等)金銭受領をする場合や、本作及び二
次利用した作品を有償配布する場合には、事前にご連絡下さい。
本作品の使用、配布によるいかなる損害にも、作者は責任を負いません。
◇連絡先
〒262 千葉県千葉市花見川区長作町1682-312 金子方 たくりん宛
作品の感想、質問、バグ報告、改善提案等、作者への連絡は上記まで。